#pragma once
#include "lvgl.h"
#include "theme.h"
#include <stdio.h>

#define GUI_VERSION "1.0.0"

#define GUI_VERSION_CODE 250301


#define GUI_VERSION_NOTE "API version:" GUI_VERSION ",please make sure your code is compatible with this version"
#pragma message(GUI_VERSION_NOTE)






// UI_Object 类，表示一个 UI 元素
class UI_Object {
protected:
    lv_obj_t* this_object;  // LVGL 对象指针，表示当前 UI 元素
    lv_coord_t width;       // UI 元素的宽度
    lv_coord_t height;      // UI 元素的高度

public:
    // 构造函数
    UI_Object();

    // 析构函数
    ~UI_Object();

    // 设置 UI 元素的尺寸
    void set_size(lv_coord_t width, lv_coord_t height);

    /**
     *@brief 获取对象宽度，请注意lvgl中的元素对象在其定时器中被渲染，获取的对象宽度是对象的最终渲染宽度，而不是对象在屏幕上实时的宽度
     *
     * @return lv_coord_t
     */
    lv_coord_t get_width();
    /**
     * @brief 获取对象高度，请注意lvgl中的元素对象在其定时器中被渲染，获取的对象高度是对象的最终渲染宽度，而不是对象在屏幕上实时的高度
     *
     * @return lv_coord_t
     */
    lv_coord_t get_height();

    // 设置 UI 元素的圆角半径
    void set_radius(lv_coord_t radius);

    // 设置 UI 元素的背景颜色和不透明度
    void set_bg_color(lv_color_t color, lv_opa_t value, lv_style_selector_t selector);

    // 设置 UI 元素的位置
    void set_pos(lv_coord_t x, lv_coord_t y);

    // 设置 UI 元素的事件回调函数
    void set_event_cb(lv_event_cb_t event_cb, lv_event_code_t filter, void* user_data);

    // 添加 UI 元素的标志（如可点击、可滚动等）
    void add_flag(lv_obj_flag_t flag);

    // 清除 UI 元素的标志
    void clear_flag(lv_obj_flag_t flag);

    // 隐藏或显示 UI 元素
    void hidden(bool hidden);

    // 获取 LVGL 对象指针
    virtual lv_obj_t* get_lv_obj_t();

    // 设置 UI 元素的 Flex 布局
    virtual void set_flex_layout(lv_flex_flow_t flow, bool wrap, bool reserve, lv_flex_align_t main_align, lv_flex_align_t cross_align, lv_flex_align_t track);
};